#include<iostream>
#include<vector>
#include<cstdio>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
using namespace std;

//进程对应的数据
vector<int> data;
const string gsep =" ";
enum{
  OK=0,
  OPEN_FILE_ERR=1,
};

int Savebegin()
{
  //文件用时间命名
  string name=to_string(time(nullptr));
  name+=".backup";
  //以写的形式打开文件
  FILE* fp=fopen(name.c_str(),"w");
  if(fp==nullptr)return OPEN_FILE_ERR;
  string datastr;
  for(auto d : data)
  {
    datastr+=to_string(d);
    datastr+=gsep;
  }
  //将字符串写入到文件当中
  fputs(datastr.c_str(),fp);
  fclose(fp);
  return OK;
}


//备份函数
void Save()
{
  pid_t id=fork();
  if(id==0)//子进程
  {
    //子进程只能看到创建时的data，因为进程具有独立性，当父进程修改data的时候会发生写实拷贝
    int code=Savebegin();
    exit(code);
  }
  int status=0;
  //等子进程退出
  pid_t rid=waitpid(id,&status,0);
  if(rid>0)//等待成功
  {
    int code=WEXITSTATUS(status);
    if(code==0)//表示备份成功
      printf("备份成功，wait child success,exit code:%d\n",code);
    //备份失败
    else printf("备份失败，exit code:%d\n",code);
  }
  //等待失败
  else 
  {
    perror("waitpid");
  }
}

int main()
{
  int count=1;
  while(true)
  {
    data.push_back(count++);
    sleep(1);
    //每隔十秒备份一次
    if(count%10==0)
    {
      Save();
    }
  }
  return 0;
}
